package com.woniu.server;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.woniu.dto.*;
import com.woniu.model.TUser;
import com.woniu.params.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;
import java.util.Map;


/**
 * <p>
 *  服务类
 * </p>
 *
 * @author 吴彦祖
 * @since 2024年05月23日
 */
public interface TUserService extends IService<TUser> {
    /**
     *
     * @param toBean 用户登录所需参数(用户名,密码)
     * @return 返回一个 用户名和token的dto
     */
    TUser pwdLogin(UserLoginParam toBean) throws Exception;

    /**
     * 发送注册验证码
     * @param mobile 手机号
     * @throws Exception
     */
    void sendRegisterCode(String mobile) throws Exception;

    /**
     * 根据手机验证码 注册
     * @param param
     * @return
     * @throws Exception
     */
    UserRegisterDto registerByCode(CodeRegisterParam param) throws Exception;

    /**
     * 验证码登录
     * @param toBean 用户手机号和验证码
     * @return 返回用户名和token
     */
    TUser codeLogin(CodeLoginParam toBean);

    /**
     * 用户收藏商品
     * @param goodsId 商品id
     * @param userId  用户id
     */
    void collect(Integer goodsId, int userId) throws Exception;

    /**
     * 用户取消收藏图书
     * @param goodsId 商品id
     * @param userId 用户id
     */
    void delCollect(Integer goodsId, int userId) throws Exception;

    /**
     * 查看我的收藏
     * @param pageNum 第几页
     * @param pageSize 每页条数
     * @param userId 用户id
     * @return
     */
    Page<GoodsDto> myCollect(Integer pageNum, Integer pageSize, int userId) throws Exception;

    /**
     * 用户添加商品 购物车
     * @param param
     */
    void addShopping(AddShoppingParam param) throws Exception;

    /**
     * 删除购物车的商品信息
     * @param ids 商品id 集合
     * @param userId 用户id
     */
    void delShopping(List<Integer> ids, int userId) throws Exception;
    /**
     * 分页查询购物车 数据
     * @param pageNum 第几页
     * @param pageSize 每页几条数据
     * @param userId 用户id
     * @return
     * @throws Exception
     */
    Page<Map<Object, Object>> selAllShopping(Integer pageNum, Integer pageSize, int userId);

    /**
     * 修改购物车某件商品的数量
     * @param param
     */
    void modifyShopping(ModifyShoppingParam param) throws Exception;

    /**
     * 实名认证接口
     * @param img 身份证图片
     * @param userId 用户id
     * @return
     */
    TUser authentication(MultipartFile img, int userId) throws Exception;

    /**
     * 修改头像
     * @param image 新头像数据
     * @return 返回新头像地址
     */
    String modifyImg(MultipartFile image,int userId) throws Exception;

    /**
     * 修改个人信息
     * @param param 要修改的个人信息数据
     * @return
     */
    TUser modifyMyInfo(ModifyMyInfoParam param);

    /**
     * 修改密码
     * @param param
     */
    void modifyPwd(ModifyPwdParam param) throws Exception;

    /**
     * 根据用户id添加信誉积分
     * @param toBean
     * @return
     */
    TUser addCredibility(AddCredibilityParam toBean);

    /**
     * 上传头像
     * @param image  用户头像数据
     * @param userId 用户id
     * @return
     */
    String uploadImg(MultipartFile image, int userId) throws Exception;

    /**
     * 用户查询我的订单
     * @return list用户自己的订单
     */
    List<OrderDto> checkMyOrder(int userId);

    /**
     * 用户查询自己的订单详情
     * @return list用户自己的订单详情
     */
    List<OrderDetailsDto> checkMyOrderDetail(int id, String orderNum);

    /**
     * 用户查询所有垃圾类别
     * @return list垃圾类别
     */
    List<JunkTypeDto> checkJunkType();
}
